import html2canvas from 'html2canvas';
import jsPDF from 'jspdf';

export const downloadPDF = (page, data, isDownload, callback) => {
  html2canvas(page).then(function (canvas) {
    let pdfData = canvas2PDF(canvas, data, isDownload);
    callback ? callback(pdfData) : null;
  });
};

const canvas2PDF = (canvas, data, isDownload) => {
  const contentWidth = canvas.width;
  const contentHeight = canvas.height;

  let pageData = canvas.toDataURL('image/jpeg', 1.0);

  let pdfX = ((contentWidth + 10) / 2) * 0.75;
  let pdfY = ((contentHeight + 500) / 2) * 0.75; // 500为底部留白

  // 设置内容图片的尺寸，img是pt单位
  let imgX = pdfX;
  let imgY = (contentHeight / 2) * 0.75; //内容图片这里不需要留白的距离


  const pdf = new jsPDF('', 'pt', [pdfX, pdfY]);
  pdf.addImage(pageData, 'jpeg', 0, 0, imgX, imgY);
  if (isDownload) {
    pdf.save(
      `${data.order.patientName ? data.order.patientName : '-'}_${
        data.order.orderCreateTime
      }_订单信息报告.pdf`,
    );
  }

  return pdf.output('datauristring');
};

/***
 * 为了不影响其它的pdf导出
 * a4页面pdf导出
 */
const canvas2PDFA4 = async (canvas, data, text, isDownload, callback) => {
  
  // const contentWidth = canvas.width;
  // const contentHeight = canvas.height;

  // // A4 纸尺寸（单位：pt）
  // const pageWidth = 595.28; // A4 纸宽度
  // const pageHeight = 841.89; // A4 纸高度

  // // 计算缩放比例，保证内容不变形
  // const scaleFactor = pageWidth / contentWidth;
  // const scaledContentHeight = contentHeight * scaleFactor;

  // // 计算每页的 `canvas` 高度（等比例缩放后适配 A4 ）
  // const pageCanvasHeight = pageHeight / scaleFactor;

  // // 初始化 PDF
  // const pdf = new jsPDF('p', 'pt');
  // let position = 0; // 当前绘制起点
  // let pageIndex = 0; // 记录页数

  // while (position < contentHeight) {
  //   // 创建一个临时 canvas 用于分页
  //   const canvasPage = document.createElement('canvas');
  //   const ctx = canvasPage.getContext('2d');

  //   // 设置分页 canvas 的大小
  //   canvasPage.width = contentWidth;
  //   canvasPage.height = Math.min(pageCanvasHeight, contentHeight - position); // 最后一页可能小于 pageCanvasHeight

  //   // 在临时 canvas 上绘制当前页
  //   ctx.drawImage(
  //     canvas,
  //     0,
  //     position, // 从原始 canvas 的哪个位置开始截取
  //     contentWidth,
  //     pageCanvasHeight, // 截取的区域大小
  //     0,
  //     0, // 在新 canvas 上的绘制位置
  //     contentWidth,
  //     pageCanvasHeight, // 目标大小
  //   );

  //   // 转换为图片
  //   const imgData = canvasPage.toDataURL('image/jpeg', 1.0);

  //   // 添加到 PDF
  //   if (pageIndex > 0) pdf.addPage(); // 只有第一页不需要 `addPage()`
  //   pdf.addImage(
  //     imgData,
  //     'JPEG',
  //     0,
  //     0,
  //     pageWidth,
  //     Math.min(pageHeight, scaledContentHeight - position * scaleFactor),
  //   );

  //   // 更新位置
  //   position += pageCanvasHeight;
  //   pageIndex++;
  // }

  // // 下载或返回 PDF
  // if (isDownload) {
  //   pdf.save(`${data.order.patientName || '-'}_${data.order.orderCreateTime}_${text}.pdf`);
  //   callback();
  // } else {
  //   let file = pdf.output('blob');
  //   callback(file);
  // }

  const contentWidth = canvas.width;
  const contentHeight = canvas.height;

  // A4 纸尺寸（单位：pt）
  const pageWidth = 595.28; // A4 纸宽度
  const pageHeight = 841.89; // A4 纸高度

  // 计算适配 A4 的缩放比例
  const scaleFactor = Math.min(pageWidth / contentWidth, pageHeight / contentHeight);
  const scaledWidth = contentWidth * scaleFactor;
  const scaledHeight = contentHeight * scaleFactor;

  // 计算分页 canvas 高度
  const pageCanvasHeight = pageHeight / scaleFactor;

  // 初始化 PDF
  const pdf = new jsPDF('p', 'pt');
  let position = 0;
  let pageIndex = 0;

  while (position < contentHeight) {
    // 创建分页 canvas
    const canvasPage = document.createElement('canvas');
    const ctx = canvasPage.getContext('2d');

    // 确保分页 canvas 高度不会超出实际内容
    canvasPage.width = contentWidth;
    canvasPage.height = Math.min(pageCanvasHeight, contentHeight - position);

    // 绘制当前页内容
    ctx.drawImage(
      canvas,
      0,
      position,
      contentWidth,
      canvasPage.height,
      0,
      0,
      contentWidth,
      canvasPage.height,
    );

    // 转换为图片
    const imgData = canvasPage.toDataURL('image/jpeg', 1.0);

    // 添加到 PDF
    if (pageIndex > 0) pdf.addPage();
    pdf.addImage(imgData, 'JPEG', 0, 0, pageWidth, canvasPage.height * scaleFactor);

    // 更新分页起点，**避免丢失像素**
    position += canvasPage.height;
    pageIndex++;
  }

  // 下载或返回 PDF
  if (isDownload) {
    pdf.save(`${data.order.patientName || '-'}_${data.order.orderCreateTime}_${text}.pdf`);
    callback();
  } else {
    let file = pdf.output('blob');
    callback(file);
  }
};
export const downloadPDFA4 = (page, data, text, isDownload, callback) => {

  html2canvas(page, {
    useCORS: true, // 支持跨域资源
    scale: 2, // 增加渲染质量
    scrollX: 0, // 从0开始
    scrollY: -window.scrollY, // 包含滚动区域

    logging: true, // 开启日志帮助调试
  }).then(function (canvas) {
    canvas2PDFA4(canvas, data, text, isDownload, (file) => {
      callback ? callback(file) : null;
    });
  });
  // html2canvas(page).then(function (canvas) {

  //   canvas2PDFA4(canvas, data, text, isDownload, (file) => {
  //     callback ? callback(file) : null;
  //   });
  // });
};
